home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 4 / Apprentice-Release4.iso / Source Code / Libraries / MacTCP Library 1.1 / Library / HighLevel ƒ / Source ƒ / HighLevelTCP.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-04  |  3.4 KB  |  175 lines  |  [TEXT/SPM ]

  1. /*
  2.     HighLevelTCP.c
  3.  
  4.     high-level TCP I/O functions
  5.  
  6.     11/28/95 MEC - Created.
  7. */
  8.  
  9. #include <HighLevelTCP.h>
  10.  
  11. #include <SegLoad.h>
  12. #include <OSUtils.h>
  13.  
  14. #if defined(SYMANTEC_C)||defined(THINK_C)
  15. #define inline
  16. #endif
  17.  
  18. #if defined(SYMANTEC_C)||defined(THINK_C)
  19. #else
  20. #pragma mark -
  21. #pragma mark •• High-level TCP Functions ••
  22. #endif
  23. OSErr tcpCreate(StreamPtr *stream,ProcPtr tcpNotifyProc,Ptr buffer, long bufsize){
  24.     OSErr err=noErr;
  25.     TCPiopb tcp;
  26.     TCPNotifyUPP notify;
  27.     
  28.     if (buffer == NULL){
  29.         if (bufsize == 0)
  30.             bufsize = 16*1024;
  31.         
  32.         buffer=NewPtr(bufsize);
  33.     }
  34.     
  35.     notify=NewTCPNotifyProc(tcpNotifyProc);
  36.     
  37.     tcp.csParam.create.rcvBuff=buffer;
  38.     tcp.csParam.create.rcvBuffLen=bufsize;
  39.     tcp.csParam.create.notifyProc=notify;
  40.     
  41.     err=TCP_Create(&tcp,false);// create the stream...
  42.     
  43.     *stream = err ? 0 : tcp.tcpStream;
  44.     
  45.     return err;
  46. }
  47.  
  48. OSErr tcpConnect(StreamPtr stream,ip_addr host,short port,short timeout){
  49.     TCPiopb tcp;
  50.     
  51.     tcp.tcpStream=stream;
  52.     
  53.     tcp.csParam.open.ulpTimeoutValue=timeout;
  54.     tcp.csParam.open.ulpTimeoutAction=0;
  55.     tcp.csParam.open.remoteHost=host;
  56.     tcp.csParam.open.remotePort=port;
  57.     tcp.csParam.open.validityFlags=0;
  58.     tcp.csParam.open.tosFlags=0;
  59.     tcp.csParam.open.precedence=0;
  60.     tcp.csParam.open.dontFrag=true;
  61.     tcp.csParam.open.timeToLive=0;
  62.     tcp.csParam.open.security=0;
  63.     tcp.csParam.open.optionCnt=0;
  64.     
  65.     return TCP_ActiveOpen(&tcp,false);// Open the connection...
  66. }
  67.  
  68. OSErr tcpSend(StreamPtr stream,Ptr data,unsigned short len,Boolean push,Boolean urgent){
  69.     TCPiopb tcp;
  70.     wdsEntry en[2];
  71.     
  72.     en[0].length=len;
  73.     en[0].ptr=data;
  74.     
  75.     en[1].length=0;
  76.     en[1].ptr=0;
  77.     
  78.     tcp.tcpStream=stream;
  79.     
  80.     tcp.csParam.send.ulpTimeoutValue=0;
  81.     tcp.csParam.send.ulpTimeoutAction=0;
  82.     tcp.csParam.send.validityFlags=0;
  83.     tcp.csParam.send.pushFlag=push;
  84.     tcp.csParam.send.urgentFlag=urgent;
  85.     tcp.csParam.send.wdsPtr=(char*)en;
  86.     
  87.     return TCP_Send(&tcp,false); // send data synchronously...
  88. }
  89.  
  90. OSErr tcpRead(StreamPtr stream,Ptr data,unsigned short *len){
  91.     OSErr err=noErr;
  92.     TCPiopb tcp;
  93.     
  94.     tcp.tcpStream=stream;
  95.     
  96.     tcp.csParam.receive.commandTimeoutValue=0;
  97.     tcp.csParam.receive.rcvBuff = (char*) data;
  98.     tcp.csParam.receive.rcvBuffLen = *len;
  99.     
  100.     err=TCP_Rcv(&tcp,false);// Do a synchronous read...
  101.     
  102.     *len = tcp.csParam.receive.rcvBuffLen;
  103.     
  104.     return err;
  105. }
  106.  
  107. OSErr tcpNoCopyRcv(StreamPtr stream,TCPiopb *tcp,short rdsLen,rdsEntry *rds){
  108.     
  109.     if (tcp == NULL)
  110.         return tcpNilPB;
  111.     
  112.     // put 0 after last RDS entry
  113.     rds[rdsLen].length=0;
  114.     
  115.     tcp->tcpStream=stream;
  116.     
  117.     tcp->csParam.receive.commandTimeoutValue=0;
  118.     tcp->csParam.receive.rdsPtr=(char*)rds;
  119.     tcp->csParam.receive.rdsLength=rdsLen;
  120.     
  121.     TCP_NoCopyRcv(tcp,true);
  122.     
  123.     return tcp->ioResult;
  124. }
  125.  
  126. OSErr tcpReturnBuffers(StreamPtr stream,rdsEntry *rds){
  127.     TCPiopb tcp;
  128.     
  129.     tcp.tcpStream=stream;
  130.     
  131.     tcp.csParam.receive.rdsPtr=(char*)rds;
  132.     
  133.     return TCP_RcvBfrReturn(&tcp,false);
  134. }
  135.  
  136. OSErr tcpClose(StreamPtr stream){
  137.     TCPiopb tcp;
  138.  
  139.     tcp.tcpStream=stream;
  140.     tcp.csParam.close.ulpTimeoutValue=0;
  141.     tcp.csParam.close.ulpTimeoutAction=0;
  142.     tcp.csParam.close.validityFlags=0;
  143.     
  144.     return TCP_Close(&tcp,false);
  145. }
  146.  
  147. OSErr tcpRelease(StreamPtr stream,Ptr *buffer, long *bufsize){
  148.     TCPiopb tcp;
  149.  
  150.     tcp.tcpStream=stream;
  151.  
  152.     if (buffer != NULL)
  153.         *buffer = tcp.csParam.create.rcvBuff;
  154.     else
  155.         DisposePtr(tcp.csParam.create.rcvBuff);
  156.  
  157.     if (bufsize != NULL)
  158.         *bufsize = tcp.csParam.create.rcvBuffLen;
  159.     
  160.     
  161.     return TCP_Release(&tcp,false);
  162. }
  163.  
  164. OSErr tcpAbort(StreamPtr stream){
  165.     TCPiopb tcp;
  166.  
  167.     tcp.tcpStream=stream;
  168.     
  169.     return TCP_Abort(&tcp,false);
  170. }
  171.  
  172.  
  173.  
  174.  
  175.